package ucla.axelia.vista;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import nextapp.echo2.app.Component;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.layout.GridLayoutData;

import ucla.axelia.controlador.interfaces.IServicioAdministracionVoluntario;
import ucla.axelia.modelo.beans.Nacionalidad;
import ucla.axelia.modelo.data.Pais;
import ucla.axelia.modelo.data.Voluntario;

import com.obelisco.vista.componentes.Catalogo;
import com.obelisco.vista.componentes.ContenedorBusqueda;
import com.obelisco.vista.controles.Grid;
import com.obelisco.vista.controles.Label;
import com.obelisco.vista.controles.SelectField;
import com.obelisco.vista.controles.TextField;
import com.obelisco.vista.plantillas.VentanaBase;


public class ContenedorBusquedaVoluntarios extends ContenedorBusqueda {

	private IServicioAdministracionVoluntario servicioAdministracionVoluntario;
	private List<Pais> paises;
	private Pais paisVenezuela;
	
	private TextField txtCodigo;
	private SelectField cmbNacionalidad;
	private TextField txtCedula;
	private TextField txtNombre;
	private TextField txtApellido;
	private SelectField cmbPaises;
	private SelectField cmbPrograma;
	
	private ActionListener cmbCedulaNacionalidadListener = new  ActionListener() {
		public void actionPerformed(ActionEvent Arg) {
			paises.remove(paisVenezuela);
			boolean esExtranjero = false;
			boolean esVenezolano = false;
			if (cmbNacionalidad.getSelectedItem() != null) {
				esExtranjero = ((Nacionalidad)cmbNacionalidad.getSelectedItem()).getId().equals(Nacionalidad.EXTRANJERO);
				esVenezolano = ((Nacionalidad)cmbNacionalidad.getSelectedItem()).getId().equals(Nacionalidad.VENEZOLANO);
			}
			if (!esExtranjero)
				paises.add(paisVenezuela);
			cmbPaises.inicializarDatos(paises, "nombre", "idpais");			  
			if (esVenezolano)
				cmbPaises.setSelectedItem(paisVenezuela);			
			cmbPaises.setEnabled(!esVenezolano);
		}
	};
	
	private void initComponents() {
		/*
		 * El siguiente codigo es para saber si este contenedor de busqueda
		 * esta siendo usado deesde una ListaSimple o un Catalogo
		 */
		int numColumnasGrid = 6;
		Component padre = this.getParent();
		while (!(padre instanceof VentanaBase)) {
			padre = padre.getParent();
		}
		if (padre instanceof Catalogo) {
			numColumnasGrid = 4;
		}
		/*
		 * */
		
		this.removeAll();
		
	    Grid grdBusqueda = new Grid();
		grdBusqueda.setWidth(new Extent(100, Extent.PERCENT));
		grdBusqueda.setSize(numColumnasGrid);
		grdBusqueda.setStyleName("Obelisco.GridPaneDialogo");
		add(grdBusqueda);
							
		Label lbCedulaVoluntario = new Label("Cedula");
		grdBusqueda.add(lbCedulaVoluntario);
		Row rowAux=new Row();
		rowAux.setCellSpacing(new Extent (10, Extent.PX));
		cmbNacionalidad  = new SelectField(80);
		cmbNacionalidad.setNombreItemDefecto("Cualquiera");
		cmbNacionalidad.addActionListener(this.cmbCedulaNacionalidadListener);
		rowAux.add(cmbNacionalidad);
		txtCedula = new TextField(70);
		txtCedula.setMaximumLength(8);
		rowAux.add(txtCedula);
		grdBusqueda.add(rowAux);
		
		Label lbNacionalidadVoluntario = new Label("Nacionalidad");
		grdBusqueda.add(lbNacionalidadVoluntario);		
		cmbPaises = new SelectField(150);
		cmbPaises.setNombreItemDefecto("Cualquiera");
		grdBusqueda.add(cmbPaises);
		
		if (numColumnasGrid == 6) {
			Label lbCodigoVoluntario = new Label("Codigo");
			grdBusqueda.add(lbCodigoVoluntario);		
			txtCodigo = new TextField(115);
			txtCodigo.setMaximumLength(8);
			grdBusqueda.add(txtCodigo);
		}
		
		Label lbNombreVoluntario = new Label("Nombre");
		grdBusqueda.add(lbNombreVoluntario);		
		txtNombre = new TextField(160);
		txtNombre.setMaximumLength(50);
		grdBusqueda.add(txtNombre);
		
		GridLayoutData gridLayout1 = new GridLayoutData();
		gridLayout1.setColumnSpan(3);
		
		Label lbApellidoVoluntario = new Label("Apellido");
		grdBusqueda.add(lbApellidoVoluntario);		
		txtApellido = new TextField(150);
		txtApellido.setMaximumLength(50);				
		grdBusqueda.add(txtApellido);
		
		if (numColumnasGrid != 6) {
			Label lbCodigoVoluntario = new Label("Codigo");
			grdBusqueda.add(lbCodigoVoluntario);		
			txtCodigo = new TextField(115);
			txtCodigo.setMaximumLength(8);
			grdBusqueda.add(txtCodigo);
		}
		
		Label lblPrograma = new Label("Programa");
		grdBusqueda.add(lblPrograma);
		cmbPrograma = new SelectField(120);
		cmbPrograma.setNombreItemDefecto("Cualquiera");
		cmbPrograma.inicializarDatos(servicioAdministracionVoluntario.buscarProgramas(), "nombrePrograma", "idPrograma");
		grdBusqueda.add(cmbPrograma);
	}

    public Object[] getValoresParametros() {
		return null;
	}
 
	@Override
	public void inicializar() {
		this.initComponents();
		
		txtCodigo.setText("");
		cmbNacionalidad.inicializarDatos(Nacionalidad.getNacionalidades(), "id", "id");
		cmbNacionalidad.setSelectedItemPorId(Nacionalidad.VENEZOLANO);		
		txtCedula.setText("");
		paises = servicioAdministracionVoluntario.buscarPaises();
        cmbPaises.inicializarDatos(this.paises, "nombre", "idpais");
        paisVenezuela = this.servicioAdministracionVoluntario.buscarPaisPorId(Pais.ID_PAIS_VENEZUELA);
        cmbPaises.setSelectedItem(paisVenezuela);
        cmbPaises.setEnabled(false);
		txtNombre.setText("");
		txtApellido.setText("");
	}
		
	@Override
	public List<Voluntario> realizarBusqueda() {
		Map<String, Object> criterios = new HashMap<String, Object>();
		if (!txtCodigo.getText().trim().equals(""))
			criterios.put("codigoVoluntario", txtCodigo.getText().trim());		
		if (cmbNacionalidad.getSelectedItem() != null)
			criterios.put("nacionalidadVoluntario", ((Nacionalidad)cmbNacionalidad.getSelectedItem()).getId().toString());
		if (!(txtCedula.getText().trim()).equals(""))
			criterios.put("cedulaVoluntario", (txtCedula.getText().trim()));
		if (cmbPaises.getSelectedItem() != null) {
			Pais pais = (Pais) cmbPaises.getSelectedItem();
			criterios.put("pais.idpais", pais.getIdpais().toString());
		}
		if (!txtNombre.getText().trim().equals(""))
			criterios.put("nombreVoluntario", txtNombre.getText().trim());
		if (!txtApellido.getText().trim().equals(""))
			criterios.put("apellidoVoluntario", txtApellido.getText().trim());
		if (cmbPrograma.getSelectedItem() != null)
			criterios.put("programaActual", cmbPrograma.getSelectedItem());
		
		return this.servicioAdministracionVoluntario.buscarVoluntarioPorCriterios(criterios);
	}

	
	// Getter y Setter
	public IServicioAdministracionVoluntario getServicioAdministracionVoluntario() {
		return servicioAdministracionVoluntario;
	}

	public void setServicioAdministracionVoluntario(
			IServicioAdministracionVoluntario servicioAdministracionVoluntario) {
		this.servicioAdministracionVoluntario = servicioAdministracionVoluntario;
	}

}